package com.mntp.iodemo.biodemo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.Socket;

/**
 * 同步阻塞IO模型
 *
 * BIO客户端代码
 */
public class BioClientTest {
    /**
     * 1.创建Socket对象，并指定服务器的IP地址和端口号,底层实现
     * （1）创建一个socket，例如socket=3,这个是客户端socket和服务端没关系
     * （2）bind(3,45677)=0,绑定端口，这里不用监听
     * （3）connect(3,127.0.0.1,9999)=0,和客户端建立连接，底层会经历三次握手过程，连接建立成功的时候，内核会在服务端创建一个socket,例如socket=5
     * 2.向服务器发送消息，底层实现
     * （1）sendto(5,"hello server, i am client \n")
     * 3.读取服务器的响应消息，底层实现
     * （1）recvfrom(5,buf,1024,0,&addr,&addr_len)
     */
    public static void main(String[] args) {
        Socket socket = null;
        BufferedReader in = null;
        BufferedWriter out= null;

        try {
            // 1.创建Socket对象，并指定服务器的IP地址和端口号
            socket = new Socket("127.0.0.1", 9999);
            System.out.println("client start success .....");
            // 获取输入输出流
            in = new BufferedReader(new java.io.InputStreamReader(socket.getInputStream()));
            out = new BufferedWriter(new java.io.OutputStreamWriter(socket.getOutputStream()));
            // 2.向服务器发送消息
            out.write("hello server, i am client \n");
            out.flush();
            // 3.读取服务器的响应消息
            String line = in.readLine();
            System.out.println(">>>>> msg from server is:   " + line);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }


    }
}
